package com.shoy.myapp.app;

import android.app.Application;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.util.Log;
import com.alibaba.fastjson.JSONObject;
import com.shoy.myapp.common.Utils;

import java.util.*;

/**
 * 全局应用程序类
 *
 * @author shoy
 * @created 2015/4/1 0001.
 */
public class AppContext extends Application {
    private final String TAG = this.getClass().getSimpleName();
    private static String appId;

    /**
     * 接口缓存
     */
    private static Map<String, JSONObject> JSON_RESP_CACHE =
            Collections.synchronizedMap(new WeakHashMap<String, JSONObject>());
    /**
     * 整个应用全局可访问数据集合*
     */
    private static Map<String, Object> GLOBAL_DATA = new HashMap<String, Object>();

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, getAppId());
    }

    /**
     * 网络是否连接
     *
     * @return 是否连接
     */
    public boolean isConnected() {
        return Utils.isConnected(this);
    }

    /**
     * 获取App安装包信息
     *
     * @return 安装包信息
     */
    public PackageInfo getPackageInfo() {
        PackageInfo info = null;
        try {
            info = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace(System.err);
        }
        if (info == null) info = new PackageInfo();
        return info;
    }

    /**
     * 获取唯一标识
     *
     * @return 唯一标识
     */
    public String getAppId() {
        if (Utils.isEmpty(appId)) {
            appId = getProperty(Constants.KEY_UUID);
            if (Utils.isEmpty(appId)) {
                appId = UUID.randomUUID().toString();
                setProperty(Constants.KEY_UUID, appId);
            }
        }
        return appId;
    }

    /**
     * 设置Json缓存
     *
     * @param url  url链接
     * @param json Json对象
     */
    public void setJson(String url, JSONObject json) {
        JSON_RESP_CACHE.put(url, json);
    }

    /**
     * 获取缓存Json
     *
     * @param url url链接
     * @return Json对象
     */
    public JSONObject getJson(String url) {
        if (JSON_RESP_CACHE.containsKey(url))
            return JSON_RESP_CACHE.get(url);
        return null;
    }

    /**
     * 设置全局传递参数
     *
     * @param key   键
     * @param value 值
     */
    public void setData(String key, Object value) {
        GLOBAL_DATA.put(key, value);
    }

    /**
     * 获取全局传递参数
     *
     * @param key 键
     * @return 值
     */
    public Object getData(String key) {
        return getData(key, false);
    }

    /**
     * 从Application中移除数据
     *
     * @param key 键
     */
    public void removeData(String key) {
        if (GLOBAL_DATA.containsKey(key)) GLOBAL_DATA.remove(key);
    }

    /**
     * 获取全局传递参数
     *
     * @param key    键
     * @param remove 是否删除
     * @return 值
     */
    public Object getData(String key, boolean remove) {
        if (GLOBAL_DATA.containsKey(key)) {
            Object value = GLOBAL_DATA.get(key);
            if (remove) {
                GLOBAL_DATA.remove(key);
            }
            return value;
        }
        return null;
    }

    /**
     * 设置文件配置
     *
     * @param key   键
     * @param value 值
     */
    public void setProperty(String key, String value) {
        AppConfig.getInstance(this).set(key, value);
    }

    /**
     * 获取文件配置
     *
     * @param key 键名
     * @return 值
     */
    public String getProperty(String key) {
        return AppConfig.getInstance(this).get(key);
    }
}
